package main

import (
	"fmt"
	"github.com/gocolly/colly/v2"
	"math"
	"trial/pack/trail"
	"unicode/utf8"
)

type Number int

func requestUrl() {
	n := 1023
	_ = n
	d := 980
	_ = d
	const name string = "12312"
	const age Number = 1231231

	c := colly.NewCollector(
		colly.AllowedDomains("hackerspaces.org", "wiki.hackerspaces.org"),
	)

	c.OnHTML("a[href]", func(e *colly.HTMLElement) {
		link := e.Attr("href")
		fmt.Printf("Link found: %q -> %s\n", e.Text, link)

		// c.Visit(e.Request.AbsoluteURL(link))
	})

	c.OnRequest(func(r *colly.Request) {
		fmt.Println("Visiting", r.URL.String())
	})

	c.Visit("https://hackerspaces.org/")
}

// 保留精度范围
func saveLit() {
	pi := 3.1415926
	var ratio float64 // 使用一个变量作为精度范围, 比如 2 位小数时，精度范围应该为 100

	ratio = math.Pow(10, 2)            // 计算精度范围，2 位小数 = 100
	s1 := math.Round(pi*ratio) / ratio // 保留 2 位小数
	fmt.Printf("%T %v\n", s1, s1)

	ratio = math.Pow(10, 1)            // 计算精度范围，1 位小数 = 10
	s2 := math.Round(pi*ratio) / ratio // 保留 1 位小数
	fmt.Printf("%T %v\n", s2, s2)
}

// 指针
func pointers() {
	x := 100
	y := &x // 获取 x 的内存地址
	*y = 9999
	fmt.Printf("x:%v, y:%v\n", x, y)
}

// 数组
func arrayS() {
	arrT := [3]int{1, 2, 3}
	arrT[0] = 9999
	arrT1 := [...]string{"h", "o", "w", "t"}
	fmt.Printf("%v \n", arrT1[1:3])
	fmt.Printf("arrt=%v, arrt1=%v, len(arrt)=%d, len(arrt1)=%d", arrT, arrT1, len(arrT), len(arrT1))
}

// 切片
func sliceS() {
	sliceT := make([]int, 3, 5)
	fmt.Printf("切片长度 = %d, 容量 = %d\n", len(sliceT), cap(sliceT))
}

// 字符切片
func sliceS1() {
	s := "hello world"
	b := []byte(s)
	b1 := string(b)
	fmt.Printf("b %v \n", b)
	fmt.Printf("b1 %v \n", b1)
}

// 字符串计算
func stringS() {
	n := "four 服务" // 5 + 6 = 11
	n1 := utf8.RuneCountInString(n)
	println("n:", n1)

	s := 's'
	s1 := '我'
	println(s, s1)
}

// 字典
func mapS() {
	m := make(map[string]int)
	m["one"] = 1
	m["two"] = 2
	m["three"] = 3
	fmt.Printf("m %v len(m)  %v  \n", m, len(m))

	delete(m, "one")
}

func hasPrototype(mapD map[string]int, key string) (bool bool, int int, x string) {
	x = "123"
	if _, ok := mapD[key]; ok {
		return true, 123, x
	}
	return false, 967, x
}

func init() {
	//fmt.Printf("init 程序启动\n")
}

func main() {
	// mapS()
	// x := [3]int{1, 2, 3}
	// trail.SliceArgument(&x)
	// fmt.Printf("x %v \n", x)
	trail.GoroutinesFunc()
}
